前一篇帶各位在 Selenium 中透過執行 JavaScript 語句達到向下捲動的效果。在每次爬取完成後都進行捲動更新載入的文章,並不重複爬取。
今天要帶各位實戰一個自動按好友貼文愛心的小爬蟲。當我們直接進到 https://www.instagram.com/ 會發現要輸入帳號密碼。
在程式當中直接寫入帳號密碼有一些危險性(不小心 git push 上去),有兩個解決方法,將帳號密碼寫在環境變數,並在程式中去讀取環境變數。另一個解決方法是,將登入過後的使用者 session 擷取下來,並在程式運行中以 cookies 的方式帶上去。
先使用 Edithiscookies 等工具將 cookies 上的使用者 session 匯出。
將使用者 session 導入至 selenium cookies 並重新整理。
不必輸入帳號密碼便可成功登入。
首先先寫個簡單的程式用 selenium 開啟 instagram 網頁。
會發現需要進行登入。
from selenium import webdriver
from time import sleep
import json
if __name__ == '__main__':
driver = webdriver.Chrome()
driver.get('https://www.instagram.com/')
我們可以到 https://www.instagram.com/ 進行登入,並用 cookies 修改的擴充套件將 cookies 匯出。
接下來將 cookies 貼上到一個 JSON 檔,可以只留下 name 與 value 即可。
再來,在我們的程式中讀取該 JSON 檔案,並寫個 for-loop 將 cookie 們加入 Selenium,注意要在加入完成後 refresh。
from selenium import webdriver
from time import sleep
import json
if __name__ == '__main__':
with open('cookies_jar.json') as f:
cookies = json.load(f)
driver = webdriver.Chrome()
driver.get('https://www.instagram.com/')
for cookie in cookies:
driver.add_cookie(cookie)
driver.refresh()
可以發現我們能夠成功進行登入了。
今天透過加入使用者 session 至 Selenium 當中,達到不須輸入使用者帳號密碼進行登入的效果。此技巧可以用在許多應用程式的爬取上面,例如說 facebook Discord 等等需要登入的應用程式都可以透過這個技巧來達到不須輸入使用者帳號密碼進行登入。
明天會帶各位加入自動點擊 Instagram 中好友貼文贊的功能。
Instagram: https://www.instagram.com/
Selenium with Python docs : https://selenium-python.readthedocs.io/
Selenium docs : https://readthedocs.org/projects/selenium-python/downloads/pdf/latest/